package edu.northwestern.cbits.purple_robot_manager.plugins; import java.util.Collection; import java.util.HashMap; import java.util.Map; import edu.northwestern.cbits.purple_robot_manager.logging.LogManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; public class OutputPluginManager extends BroadcastReceiver { public static OutputPluginManager sharedInstance = new OutputPluginManager(); private Map<Class<OutputPlugin>, OutputPlugin> _plugins = new HashMap<>(); public OutputPlugin pluginForClass(Context context, Class c) { OutputPlugin plugin = this._plugins.get(c); if (plugin != null) return plugin; this.onReceive(context, null); return this._plugins.get(c); } public static OutputPluginManager getSharedInstance() { return OutputPluginManager.sharedInstance; } public void onReceive(Context context, Intent intent) { for (Class<OutputPlugin> pluginClass : OutputPlugin.availablePluginClasses()) { try { OutputPlugin plugin = this._plugins.get(pluginClass); if (plugin == null) { plugin = pluginClass.newInstance(); this._plugins.put(pluginClass, plugin); } plugin.setContext(context); if (intent != null) plugin.process(intent); } catch (InstantiationException | IllegalAccessException e) { LogManager.getInstance(context).logException(e); } } } public Collection<OutputPlugin> getPlugins() { return this._plugins.values(); } }